home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 34 / Amiga Format CD34 (1998-11-20)(Future Publishing)(GB)[!][Christmas issue].iso / -seriously_amiga- / programming / basic / blitzc2p / c2p / c2p040only.ascii < prev    next >
Text File  |  1998-10-01  |  7KB  |  405 lines

  1. WBStartup
  2. NoCli
  3.  
  4. ; 030/50 results:
  5.  
  6. ; 320x200 @28.2fps PAL
  7. ; 320x256 @21.6fps PAL
  8.  
  9. ; 040/25 results:
  10.  
  11. ; 320x200 @49.65fps DoublePAL or 55.3fps PAL
  12. ; 320x256 @36.2fps DoublePAL or 42.5fps PAL
  13. ; 320x240 @39.5fps DoublePAL or 45.5fps PAL
  14.  
  15. ; 060/50 results:
  16.  
  17. ; 320x256 @50fps PAL
  18. ; 320x200 @66.1fps PAL
  19.  
  20. #c2pBPLX=320
  21. #c2pBPLY=256
  22. #c2pBPLSIZE=(#c2pBPLX*#c2pBPLY)/8
  23.  
  24. #scrwidth=#c2pBPLX
  25. #scrheight=#c2pBPLY
  26. #screensize=#scrwidth*#scrheight
  27.  
  28. ; c2p1x1_8_c5_040
  29.  
  30. ; 110% on 040-25
  31.  
  32. Statement c2p040onlyinit{A.l,B.l}
  33.  
  34.   ;A.l=d0=Width.w
  35.   ;B.l=d1=Height.w
  36.  
  37. ; d0.w  chunkyx [chunky-pixels]
  38. ; d1.w  chunkyy [chunky-pixels]
  39. ; d3.w  scroffsy [screen-pixels]
  40.  
  41. c2p1x1_8_c5_040_init
  42.   LEA c2p_data(pc),a0
  43.   ANDI.l  #$ffff,d0
  44.   MULU.w  d0,d3
  45.   LSR.l #3,d3
  46.   MOVE.l  d3,c2p_scroffs-c2p_data(a0)
  47.   MULU.w  d0,d1
  48.   MOVE.l  d1,c2p_pixels-c2p_data(a0)
  49. AsmExit
  50. End Statement
  51.  
  52. Statement c2p040only{A.l,B.l}
  53.  
  54.   MOVE.l  d0,a0 ; Chunky
  55.   MOVE.l  d1,a1 ; Planar
  56.  
  57. ; a0  c2pscreen
  58. ; a1  bitplanes
  59.  
  60. c2p1x1_8_c5_040
  61.   MOVEM.l a3-a6,-(a7)
  62.  
  63.   LEA c2p_data(pc),a2
  64.  
  65.   MOVE.l  c2p_pixels-c2p_data(a2),a3
  66.   ADD.l a0,a3
  67.  
  68.   ADD.w #c2pBPLSIZE,a1
  69.   ADD.l c2p_scroffs-c2p_data(a2),a1
  70.   MOVE.l  a1,a2
  71.   ADD.l #c2pBPLSIZE*4,a2
  72.  
  73.   MOVE.l  (a0)+,d0
  74.   MOVE.l  (a0)+,d1
  75.   MOVE.l  (a0)+,d2
  76.   MOVE.l  (a0)+,d3
  77.   MOVE.l  (a0)+,d4
  78.   MOVE.l  (a0)+,d5
  79.  
  80.   MOVE.l  d4,d7     ; Swap 16x4, part 1
  81.   MOVE.w  d0,d4
  82.   SWAP  d4
  83.   MOVE.w  d4,d0
  84.   MOVE.w  d7,d4
  85.   MOVE.l  d5,d7
  86.   MOVE.w  d1,d5
  87.   SWAP  d5
  88.   MOVE.w  d5,d1
  89.   MOVE.w  d7,d5
  90.  
  91.   MOVE.l  d4,d7     ; Swap 2x4, part 1
  92.   LSR.l #2,d7
  93.   EOR.l d0,d7
  94.   AND.l #$33333333,d7
  95.   EOR.l d7,d0
  96.   LSL.l #2,d7
  97.   EOR.l d7,d4
  98.   MOVE.l  d5,d7
  99.   LSR.l #2,d7
  100.   EOR.l d1,d7
  101.   AND.l #$33333333,d7
  102.   EOR.l d7,d1
  103.   LSL.l #2,d7
  104.   EOR.l d7,d5
  105.  
  106.   MOVE.l  (a0)+,a5
  107.   MOVE.l  (a0)+,a6
  108.  
  109.   EXG d4,a5
  110.   EXG d5,a6
  111.  
  112.   MOVE.l  d4,d7     ; Swap 16x4, part 2
  113.   MOVE.w  d2,d4
  114.   SWAP  d4
  115.   MOVE.w  d4,d2
  116.   MOVE.w  d7,d4
  117.   MOVE.l  d5,d7
  118.   MOVE.w  d3,d5
  119.   SWAP  d5
  120.   MOVE.w  d5,d3
  121.   MOVE.w  d7,d5
  122.  
  123.   MOVE.l  d4,d7     ; Swap 2x4, part 2
  124.   LSR.l #2,d7
  125.   EOR.l d2,d7
  126.   AND.l #$33333333,d7
  127.   EOR.l d7,d2
  128.   LSL.l #2,d7
  129.   EOR.l d7,d4
  130.   MOVE.l  d5,d7
  131.   LSR.l #2,d7
  132.   EOR.l d3,d7
  133.   AND.l #$33333333,d7
  134.   EOR.l d7,d3
  135.   LSL.l #2,d7
  136.   EOR.l d7,d5
  137.  
  138.   MOVE.l  d1,d7     ; Swap 4x1
  139.   LSR.l #4,d7
  140.   EOR.l d0,d7
  141.   AND.l #$0f0f0f0f,d7
  142.   EOR.l d7,d0
  143.   LSL.l #4,d7
  144.   EOR.l d7,d1
  145.   MOVE.l  d3,d7
  146.   LSR.l #4,d7
  147.   EOR.l d2,d7
  148.   AND.l #$0f0f0f0f,d7
  149.   EOR.l d7,d2
  150.   LSL.l #4,d7
  151.   EOR.l d7,d3
  152.  
  153.   BRA _start
  154. _x
  155.   MOVE.l  (a0)+,d0
  156.   MOVE.l  (a0)+,d1
  157.   MOVE.l  (a0)+,d2
  158.   MOVE.l  (a0)+,d3
  159.   MOVE.l  (a0)+,d4
  160.   MOVE.l  (a0)+,d5
  161.  
  162.   MOVE.l  a6,-c2pBPLSIZE(a1)
  163.  
  164.   MOVE.l  d4,d7     ; Swap 16x4, part 1
  165.   MOVE.w  d0,d4
  166.   SWAP  d4
  167.   MOVE.w  d4,d0
  168.   MOVE.w  d7,d4
  169.   MOVE.l  d5,d7
  170.   MOVE.w  d1,d5
  171.   SWAP  d5
  172.   MOVE.w  d5,d1
  173.   MOVE.w  d7,d5
  174.  
  175.   MOVE.l  d4,d7     ; Swap 2x4, part 1
  176.   LSR.l #2,d7
  177.   EOR.l d0,d7
  178.   AND.l #$33333333,d7
  179.   EOR.l d7,d0
  180.   LSL.l #2,d7
  181.   EOR.l d7,d4
  182.   MOVE.l  d5,d7
  183.   LSR.l #2,d7
  184.   EOR.l d1,d7
  185.   AND.l #$33333333,d7
  186.   EOR.l d7,d1
  187.   LSL.l #2,d7
  188.   EOR.l d7,d5
  189.  
  190.   MOVE.l  (a0)+,d7
  191.   MOVE.l  (a0)+,a6
  192.  
  193.   MOVE.l  a5,-c2pBPLSIZE(a2)
  194.  
  195.   MOVE.l  d7,a5
  196.   EXG d4,a5
  197.   EXG d5,a6
  198.  
  199.   MOVE.l  d4,d7     ; Swap 16x4, part 2
  200.   MOVE.w  d2,d4
  201.   SWAP  d4
  202.   MOVE.w  d4,d2
  203.   MOVE.w  d7,d4
  204.   MOVE.l  d5,d7
  205.   MOVE.w  d3,d5
  206.   SWAP  d5
  207.   MOVE.w  d5,d3
  208.   MOVE.w  d7,d5
  209.  
  210.   MOVE.l  d4,d7     ; Swap 2x4, part 2
  211.   MOVE.l  d6,(a2)+
  212.   LSR.l #2,d7
  213.   EOR.l d2,d7
  214.   AND.l #$33333333,d7
  215.   EOR.l d7,d2
  216.   LSL.l #2,d7
  217.   EOR.l d7,d4
  218.   MOVE.l  d5,d7
  219.   LSR.l #2,d7
  220.   EOR.l d3,d7
  221.   AND.l #$33333333,d7
  222.   EOR.l d7,d3
  223.   LSL.l #2,d7
  224.   EOR.l d7,d5
  225.  
  226.   MOVE.l  d1,d7     ; Swap 4x1
  227.   LSR.l #4,d7
  228.   EOR.l d0,d7
  229.   MOVE.l  a4,(a1)+
  230.   AND.l #$0f0f0f0f,d7
  231.   EOR.l d7,d0
  232.   LSL.l #4,d7
  233.   EOR.l d7,d1
  234.   MOVE.l  d3,d7
  235.   LSR.l #4,d7
  236.   EOR.l d2,d7
  237.   AND.l #$0f0f0f0f,d7
  238.   EOR.l d7,d2
  239.   LSL.l #4,d7
  240.   EOR.l d7,d3
  241. _start
  242.  
  243.   MOVE.l  d2,d7     ; Swap 8x2, part 1
  244.   LSR.l #8,d7
  245.   EOR.l d0,d7
  246.   AND.l #$00ff00ff,d7
  247.   EOR.l d7,d0
  248.   LSL.l #8,d7
  249.   EOR.l d7,d2
  250.   MOVE.l  d2,d7
  251.   LSR.l #1,d7     ; Swap 1x2, part 1
  252.   EOR.l d0,d7
  253.   AND.l #$55555555,d7
  254.   EOR.l d7,d0
  255.   MOVE.l  d0,c2pBPLSIZE*2(a2)
  256.   ADD.l d7,d7
  257.   EOR.l d7,d2
  258.   MOVE.l  d3,d7     ; Swap 8x2, part 2
  259.   LSR.l #8,d7
  260.   EOR.l d1,d7
  261.   AND.l #$00ff00ff,d7
  262.   EOR.l d7,d1
  263.   LSL.l #8,d7
  264.   EOR.l d7,d3
  265.   MOVE.l  d3,d7
  266.   LSR.l #1,d7     ; Swap 1x2, part 2
  267.   EOR.l d1,d7
  268.   AND.l #$55555555,d7
  269.   EOR.l d7,d1
  270.   MOVE.l  d1,c2pBPLSIZE*2(a1)
  271.   ADD.l d7,d7
  272.   EOR.l d7,d3
  273.  
  274.   MOVE.l  d5,d7
  275.   LSR.l #4,d7
  276.   EOR.l d4,d7
  277.   AND.l #$0f0f0f0f,d7
  278.   EOR.l d7,d4
  279.   LSL.l #4,d7
  280.   EOR.l d7,d5
  281.  
  282.   EXG d4,a5
  283.   EXG d5,a6
  284.  
  285.   MOVE.l  d5,d7
  286.   LSR.l #4,d7
  287.   EOR.l d4,d7
  288.   AND.l #$0f0f0f0f,d7
  289.   EOR.l d7,d4
  290.   LSL.l #4,d7
  291.   EOR.l d7,d5
  292.  
  293.   MOVE.l  a5,d0
  294.   MOVE.l  a6,d1
  295.   MOVE.l  d2,c2pBPLSIZE(a2)
  296.  
  297.  
  298.   MOVE.l  d0,d7     ; Swap 8x2, part 3
  299.   LSR.l #8,d7
  300.   EOR.l d4,d7
  301.   AND.l #$00ff00ff,d7
  302.   EOR.l d7,d4
  303.   LSL.l #8,d7
  304.   EOR.l d7,d0
  305.   MOVE.l  d0,d7
  306.   LSR.l #1,d7     ; Swap 1x2, part 3
  307.   EOR.l d4,d7
  308.   AND.l #$55555555,d7
  309.   EOR.l d7,d4
  310.   ADD.l d7,d7
  311.   EOR.l d7,d0
  312.   MOVE.l  d1,d7     ; Swap 8x2, part 4
  313.   LSR.l #8,d7
  314.   MOVE.l  d3,c2pBPLSIZE(a1)
  315.   EOR.l d5,d7
  316.   AND.l #$00ff00ff,d7
  317.   EOR.l d7,d5
  318.   LSL.l #8,d7
  319.   EOR.l d7,d1
  320.   MOVE.l  d1,d7
  321.   LSR.l #1,d7     ; Swap 1x2, part 4
  322.   EOR.l d5,d7
  323.   AND.l #$55555555,d7
  324.   EOR.l d7,d5
  325.   ADD.l d7,d7
  326.   EOR.l d7,d1
  327.  
  328.   MOVE.l  d0,a5
  329.   MOVE.l  d1,a6
  330.  
  331.   MOVE.l  d4,d6
  332.   MOVE.l  d5,a4
  333.  
  334.   CMP.l a0,a3
  335.   BNE _x
  336.  
  337.   MOVE.l  a6,-c2pBPLSIZE(a1)
  338.   MOVE.l  a5,-c2pBPLSIZE(a2)
  339.   MOVE.l  d6,(a2)+
  340.   MOVE.l  a4,(a1)+
  341.  
  342.   MOVEM.l (a7)+,a3-a6
  343. AsmExit
  344.  
  345.   Even4
  346. c2p_data
  347. c2p_scroffs: Dc.l 0
  348. c2p_pixels: Dc.l 0
  349.   Ds.l  16
  350. End Statement
  351.  
  352.  
  353.  
  354.  
  355. .blitzprogram
  356. ; Setup
  357. InitBank 0,(#scrwidth*#scrheight)+1000,2|65536 ; Chipram planar buffer
  358. CludgeBitMap 0,#scrwidth,#scrheight,8,Bank(0)
  359. InitPalette 0,256
  360. For c=0 To 255
  361.   AGAPalRGB 0,c,Rnd(c),Rnd(c),Rnd(c)
  362. Next c
  363. AGAPalRGB 0,0,0,0,0
  364. Screen 0,0,0,#scrwidth,#scrheight,8,0,"c2p test",0,0,0
  365. Use Palette 0
  366. VWait 50
  367. baseaddress1.l=AllocMem(#scrwidth*#scrheight,$10000) ; Fastram chunky buffer
  368.  
  369. ; Put something into the chunky buffer so we can see it working
  370. GetReg a0,baseaddress1
  371. MOVE.l  #0,d0
  372. MOVE.l  #screensize-1,d1
  373. cloop
  374.   MOVE.b  d0,(a0)+
  375.   ADDQ.l  #1,d0
  376.   SUBQ.l  #1,d1
  377.   TST.l   d1
  378.   BLT     done
  379.   BRA     cloop
  380. done
  381.  
  382. ; Do the c2p test
  383. c2p040onlyinit{#scrwidth,#scrheight}
  384. VWait 20
  385. Forbid_
  386. VWait
  387. ResetTimer
  388. For time=1 To 800
  389.   c2p040only{baseaddress1,Bank(0)} ; Convert chunky to planar
  390. Next time
  391. t=Ticks
  392. VWait 2 : Permit_
  393. VWait 20
  394. FindScreen 0
  395. Window 0,0,11,640,100,0,"Test results for c2p",0,0
  396. WindowOutput 0
  397. NPrint "Routine performed @ ",50/(t/800),"fps - ",t," ticks"
  398. NPrint " "
  399. NPrint "Press mousebutton..."
  400. Free Screen 0
  401. MouseWait
  402. Free Window 0
  403. End
  404.  
  405.